﻿using System.Xml;
using System.IO;
using System;
using System.Text;
using System.Collections.Generic;
using LiveatEdu.model;
namespace LiveatEdu.dao
{
    public class ConnectionXML
    {
        XmlDocument docment = new XmlDocument();
        XmlElement documentRoot;

        public bool openDocument(string path)
        {
            try
            {
                //utiliza-se um encoding definido no Xmlreader pois no arquivo original existe caracteres acentuados ISO-8859-9
                XmlReader studentReader = XmlReader.Create(new StreamReader(path, Encoding.GetEncoding("UTF-8"))); 
                this.docment.Load(studentReader);
                this.documentRoot = docment.DocumentElement;
                ConsoleLiveEdu.logFile.AddMSgError("File " + path + " successful read at " + DateTime.Now);
                return true;
            }
            catch (FileNotFoundException e)
            {
                ConsoleLiveEdu.logFile.AddMSgError(e.Message);
                Console.WriteLine(e.Message);
                return false;
            }
            catch (XmlException e)
            {
                ConsoleLiveEdu.logFile.AddMSgError(e.Message);
                Console.WriteLine(e.Message);
                return false;
            }
        }

        public List<Student> ReadStudent()
        {
            List<Student> students = new List<Student>();
            XmlNodeList student = this.documentRoot.GetElementsByTagName("row");
            for (int i = 0; i < student.Count; i++)
            {
                List<string> studentAttribute = new List<string>();
                //seta o Nó atual que está sendo lido
                XmlNode actualNode = student.Item(i);
                //cria alista com os nós filhos do nó atual (atributos como nome login etc)
                XmlNodeList childActualNode = actualNode.ChildNodes;
                //busca matricula (posição 0)
                studentAttribute.Add(childActualNode.Item(0).InnerText);
                //busca nome (posição 1)
                studentAttribute.Add(childActualNode.Item(1).InnerText);
                //busca Curso (posição 2)
                studentAttribute.Add(childActualNode.Item(2).InnerText);
                //busca login (posição 3)
                studentAttribute.Add(childActualNode.Item(3).InnerText);
                //busca senha (posição 4)
                studentAttribute.Add(childActualNode.Item(4).InnerText);
                students.Add(new Student(studentAttribute));   
            }

            return students;
        }

        public List<Lession> ReadLession()
        {
            List<Lession> lessions = new List<Lession>();
            XmlNodeList lession = this.documentRoot.GetElementsByTagName("row");
            for (int i = 0; i < lession.Count; i++)
            {
                List<string> lesisonAttribute = new List<string>();
                //seta o Nó atual que está sendo lido
                XmlNode actualNode = lession.Item(i);
                //cria alista com os nós filhos do nó atual (atributos como nome login etc)
                XmlNodeList childActualNode = actualNode.ChildNodes;
                //busca nome (posição 0)
                lesisonAttribute.Add(childActualNode.Item(0).InnerText);
                //busca disciplina (posição 1)
                lesisonAttribute.Add(childActualNode.Item(1).InnerText);
                //busca nome disciplina (posição 2)
                lesisonAttribute.Add(childActualNode.Item(2).InnerText);
                //busca ano (posição 3)
                lesisonAttribute.Add(childActualNode.Item(3).InnerText);
                //busca semestre (posição 4)
                lesisonAttribute.Add(childActualNode.Item(4).InnerText);
                lessions.Add(new Lession(lesisonAttribute));
            }

            return lessions;
        
        }

        public List<Lession> ReadClass()
        {
            List<Lession> aulas = new List<Lession>();
            XmlNodeList aula = this.documentRoot.GetElementsByTagName("row");
            for (int i = 0; i < aula.Count; i++)
            {
                List<string> aulaAtributo = new List<string>();
                //seta o Nó atual que está sendo lido
                XmlNode actualNode = aula.Item(i);
                //cria alista com os nós filhos do nó atual (atributos como nome login etc)
                XmlNodeList childActualNode = actualNode.ChildNodes;
                //busca nome (posição 0)
                aulaAtributo.Add(childActualNode.Item(0).InnerText);
                //busca disciplina (posição 1)
                aulaAtributo.Add(childActualNode.Item(1).InnerText);
                //busca nome disciplina (posição 2)
                aulaAtributo.Add(childActualNode.Item(2).InnerText);
                //busca ano (posição 3)
                aulaAtributo.Add(childActualNode.Item(3).InnerText);
                //busca semestre (posição 4)
                aulaAtributo.Add(childActualNode.Item(4).InnerText);
                aulas.Add(new Lession(aulaAtributo,1,1));
            }

            return aulas;

        }

        public List<Group> ReadGroup()
        {
            List<Group> grupos= new List<Group>();
            XmlNodeList aula = this.documentRoot.GetElementsByTagName("row");
            for (int i = 0; i < aula.Count; i++)
            {
                List<string> grupoAtributo = new List<string>();
                //seta o Nó atual que está sendo lido
                XmlNode actualNode = aula.Item(i);
                //cria alista com os nós filhos do nó atual (atributos como nome login etc)
                XmlNodeList childActualNode = actualNode.ChildNodes;
                //busca curso_nome (posição 0) ex: sistemas de informação
                grupoAtributo.Add(childActualNode.Item(0).InnerText);
                //busca Cod. Disciplina (posição 1) 
                grupoAtributo.Add(childActualNode.Item(1).InnerText);
                //busca nome (posição 2) Ex: algoritmos I
                grupoAtributo.Add(childActualNode.Item(2).InnerText);
                //busca turma (posição 3) Ex: U
                grupoAtributo.Add(childActualNode.Item(3).InnerText);
                //busca nome teacher. (posição 4)
                grupoAtributo.Add(childActualNode.Item(4).InnerText);
                //busca nome GD (posição 5) 
                grupoAtributo.Add(childActualNode.Item(5).InnerText);
                //busca nome  exibição(posição 6) Ex: algoritmos I
                grupoAtributo.Add(childActualNode.Item(6).InnerText);
                //busca owner_grupo (posição 7) Ex: algoritmos I
                grupoAtributo.Add(childActualNode.Item(7).InnerText);
                grupos.Add(new Group(grupoAtributo));
            }

            return grupos;

        }

        public List<Teacher> ReadTeacher()
        {
            List<Teacher> teacher = new List<Teacher>();
            XmlNodeList teachers = this.documentRoot.GetElementsByTagName("row");
            for (int i = 0; i < teachers.Count; i++)
            {
                List<string> profAtributo = new List<string>();
                //seta o Nó atual que está sendo lido
                XmlNode actualNode = teachers.Item(i);
                //cria alista com os nós filhos do nó atual (atributos como nome login etc)
                XmlNodeList childActualNode = actualNode.ChildNodes;
                //busca matricula (posição 0)
                profAtributo.Add(childActualNode.Item(0).InnerText);
                //busca nome (posição 2)
                profAtributo.Add(childActualNode.Item(2).InnerText);
                 //busca login (posição 4)
                profAtributo.Add(childActualNode.Item(4).InnerText);
                //busca senha (posição 5)
                profAtributo.Add(childActualNode.Item(5).InnerText);
                teacher.Add(new Teacher(profAtributo));
            }

            return teacher;
        }

        public List<Lession> ReadTeacherGroup()
        {
            List<Lession> listaProf = new List<Lession>();
            XmlNodeList aula = this.documentRoot.GetElementsByTagName("row");
            for (int i = 0; i < aula.Count; i++)
            {
                List<string> grupoAtributo = new List<string>();
                //seta o Nó atual que está sendo lido
                XmlNode actualNode = aula.Item(i);
                //cria alista com os nós filhos do nó atual (atributos como nome login etc)
                XmlNodeList childActualNode = actualNode.ChildNodes;
                //busca curso_nome (posição 0) ex: sistemas de informação
                grupoAtributo.Add(childActualNode.Item(0).InnerText);
                //busca nome Professor (posição 1) 
                grupoAtributo.Add(childActualNode.Item(1).InnerText);
                //busca email professor (posição 2) Ex: algoritmos I
                grupoAtributo.Add(childActualNode.Item(2).InnerText);
                listaProf.Add(new Lession(grupoAtributo,1));
            }

            return listaProf;

        }
    }
}